home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_128 / dis / dis.s < prev    next >
Text File  |  1992-05-06  |  38KB  |  2,388 lines

  1. * Dis, 680000 disassembler
  2. * Greg Lee, Feb. 6, 1986
  3. *
  4. * The program Dis, this source code, and
  5. * the accompanying document are in the public domain
  6. *
  7.  
  8. * To ma with Metacomco assembler (v10.178):
  9. *  assem dis.s -o dis.o -c W150000
  10. *  alink dis.o to dis
  11.  
  12.     idnt  Dis
  13.  
  14.     section  one
  15.  
  16. lref    macro
  17. _LVO\1    equ    -6*(\2+4)
  18.     endm
  19.  
  20. call  macro
  21.     jsr    _LVO\1(A6)
  22.     endm
  23. print macro
  24.     lea    \1,A0
  25.     bsr    msg
  26.     endm
  27. char  macro
  28.     move.b    #'\1',D0
  29.     bsr    prtchr
  30.     endm
  31. comma macro
  32.     move.b    #',',D0
  33.     bsr    prtchr
  34.     endm
  35. ifnot macro
  36.     cmp.b    #'\1',D0
  37.     bne    \2
  38.     endm
  39.  
  40. SysBase    equ    4
  41.  
  42.  
  43. *--Definitions of library references
  44.  
  45.  
  46. *    Exec
  47.     lref    AllocMem,29
  48.     lref    FreeMem,31
  49.     lref    OpenLibrary,88
  50.  
  51. *    AmigaDOS
  52.     lref    Open,1
  53.     lref    Close,2
  54.     lref    Read,3
  55.     lref    Write,4
  56.     lref    Input,5
  57.     lref    Output,6
  58.     lref    DeleteFile,8
  59.     lref    IoErr,18
  60.     lref    LoadSeg,21
  61.     lref    UnLoadSeg,22
  62.  
  63.  
  64. SegMax    equ    255
  65. SymMax    equ    3200
  66. IbufLen    equ    80
  67.  
  68. main
  69.     lea    symtab,A0    * to find symtab when debugging
  70.     clr.l    (A0)
  71.     lea    segtable,A0
  72.     clr.l    (A0)
  73.  
  74.     bsr    ioinit
  75. ********************** end initialization **************
  76. *  A6 holds DOS pointer; A5 holds address to show
  77. *  D5 has code; D6 has type; D7 has address offset
  78.     moveq    #0,D7
  79.  
  80.     print    hello
  81.     bsr    leftprint
  82.  
  83.  
  84.     lea    main,A5
  85.     move.l    A5,lastadr
  86. .mloop
  87.     move.b    #0,kflag
  88.     moveq    #50,D0
  89.     bsr    column
  90.     char    *
  91.     bsr    getstr
  92.     cmp.b    #1,D3
  93.     bne    1$
  94.     move.w    reqlines,linecount
  95.     bra    .mdoit
  96.  
  97. 1$    clr.b    bflag
  98.  
  99.     ifnot    r,10$
  100.     bsr    symread
  101.     bra    .mloop
  102.  
  103. 10$
  104.     ifnot    s,11$
  105.     bsr    symsave
  106.     bra    .mloop
  107.  
  108. 11$
  109.     cmp.b    #2,D3
  110.     beq    3$
  111.  
  112.     ifnot    =,12$
  113.     bsr    addsym
  114.     move.l    lastadr,A5
  115.     bra    .mdoit
  116. 12$
  117.     ifnot    /,13$
  118.     bsr    getaddress
  119.     beq    .mloop
  120.     move.l    D0,A5
  121.     bra    .mloop
  122. 13$
  123.     ifnot    o,14$
  124.     bsr    getaddress
  125.     beq    .mloop
  126.     move.l    D0,D7
  127.     bra    .mdoit
  128. 14$
  129.     ifnot    w,15$
  130.     bsr    getnum
  131.     bne    .mloop
  132.     move.l    D2,D0
  133.     bsr    findword
  134.     bra    2$
  135.  
  136. 15$
  137.     ifnot    W,16$
  138.     bsr    getaddress
  139.     beq    .mloop
  140.     bsr    findWord
  141.     bra    2$
  142.  
  143. 16$
  144.     ifnot    f,17$
  145.     bsr    fload
  146.     bra    2$
  147. 17$
  148.     ifnot    k,18$
  149.     bsr    ksave
  150.     bra    .mloop
  151. 18$
  152.     ifnot    n,19$
  153.     bsr    getnum
  154.     bne    .mloop
  155.     move.w    D2,reqlines
  156.     move.w    D2,linecount
  157.     bra    .mdoit
  158.  
  159. 19$
  160.     move.b    D0,lastcmd
  161.     bsr    getaddress
  162.     beq    .mdoit
  163.     bsr    realaddress
  164.     add.l    D7,D0
  165.     move.l    D0,A5
  166.     bra    .mdoit
  167.  
  168.  
  169. 2$    tst.l    D0
  170.     beq    .mloop
  171.     move.l    D0,A5
  172.     bra    .mdoit
  173.  
  174.  
  175. 3$    cmp.b    lastcmd,D0
  176.     beq    31$
  177.     move.l    lastadr,A5
  178. 31$
  179.     cmp.b    #'>',D0
  180.     bne    32$
  181.     bsr    nextfseg
  182.     bra    2$
  183. 32$
  184.     cmp.b    #'<',D0
  185.     bne    33$
  186.     bsr    firstfseg
  187.     bra    2$
  188. 33$
  189.     cmp.b    #'q',D0
  190.     beq    .mdone
  191.  
  192.     ifnot    o,34$
  193.     move.l    lastadr,D7
  194.     bra    .mdoit
  195.  
  196. 34$
  197.     ifnot    ?,35$
  198.     print    helpmsg
  199.     print    helpmsg2
  200.     print    helpmsg3
  201.     bsr    leftprint
  202.     bra    .mloop
  203. 35$
  204.     ifnot    t,36$
  205.     move.b    tflag,D0
  206.     not.b    D0
  207.     move.b    D0,tflag
  208.     bra    .mloop
  209. 36$
  210.     ifnot    p,6$
  211.     move.b    pflag,D0
  212.     not.b    D0
  213.     move.b    D0,pflag
  214.     bra    .mloop
  215.  
  216. 6$    move.b    D0,lastcmd
  217.  
  218. .mdoit
  219.     move.b    #1,kflag
  220.     move.l    khandle,D0
  221.     bne    2$
  222. 1$    move.l    A5,lastadr
  223.     bsr    shlabel
  224.     bsr    aline
  225.     bsr    dline
  226.     bsr    iline
  227.     tst.w    linecount
  228.     bmi    .mloop
  229. 2$    bsr    newline
  230.     bra    1$
  231.  
  232. .mdone
  233.     bsr    funload
  234.     move.l    khandle,D1
  235.     beq    1$
  236.     call    Close
  237. 1$    moveq    #0,D0    * no error return
  238. .mreturn
  239.     rts
  240. ********************* end main ************************
  241.  
  242.  
  243.  
  244. findword
  245.     move.l    D0,D2
  246.     move.l    A5,A0
  247. 1$    cmp.w    (A0)+,D2
  248.     bne    2$
  249.     move.l    A0,D0
  250.     subq.l    #2,D0
  251.     rts
  252. 2$    cmp.l    #$80000,A0
  253.     bcs    1$
  254.     cmp.l    #$FFFFFE,A0
  255.     bhi    4$
  256.     cmp.l    #$FC0000,A0
  257.     bhi    1$
  258.     move.l    #$FC0000,A0
  259.     bra    1$
  260. 4$    moveq    #0,D0
  261.     rts
  262.  
  263. findWord
  264.     move.l    D0,D2
  265.     move.l    A5,A0
  266.     bsr    1$
  267.     tst.l    D0
  268.     bne    5$
  269.     move.l    A5,A0
  270.     addq.l    #2,A0
  271. 1$    cmp.l    (A0)+,D2
  272.     bne    2$
  273.     move.l    A0,D0
  274.     subq.l    #4,D0
  275.     rts
  276. 2$    cmp.l    #$80000,A0
  277.     bcs    1$
  278.     cmp.l    #$FFFFFE,A0
  279.     bhi    4$
  280.     cmp.l    #$FC0000,A0
  281.     bhi    1$
  282.     move.l    #$FC0000,A0
  283.     bra    1$
  284. 4$    moveq    #0,D0
  285. 5$    rts
  286.  
  287.  
  288. addsym
  289.     move.b    stfflag,D0
  290.     bne    sayisfull
  291.     move.l    lastadr,D0
  292.     bsr    pseudoaddress
  293.     sub.l    D7,D0
  294.     move.l    endsym,A1
  295.     lea    endsymtab,A0
  296.     cmp.l    A0,A1
  297.     bhi    marksyfull
  298.     beq    marksyfull
  299.     lea    ibuf,A0
  300.     addq.l    #1,A0
  301.     cmp.b    #'*',(A0)
  302.     beq    1$
  303.     lea    symtab,A1
  304. 1$    move.l    (A1),D1
  305.     beq    2$
  306.     cmp.l    D1,D0
  307.     beq    2$
  308.     addq.l    #6,A1
  309.     bra    1$
  310. 2$    move.l    D0,(A1)+
  311.     move.w    farea,D2
  312.     move.w    D2,(A1)+
  313.     tst.l    D1
  314.     bne    20$
  315.     clr.l    (A1)
  316.     move.l    A1,endsym
  317. 20$
  318.     lea    sarea,A1
  319.     add.w    D2,A1
  320.     lea    endsarea,A2
  321.     cmp.l    A2,A1
  322.     bhi    marksyfull
  323.     beq    marksyfull
  324.     moveq    #0,D3
  325.     move.l    A1,-(SP)
  326.  
  327.     addq.l    #1,A1
  328. 3$    move.b    (A0)+,D0
  329.     cmp.b    #' ',D0
  330.     blt    4$
  331.     move.b    D0,(A1)+
  332.     addq.b    #1,D3
  333.     bra    3$
  334. 4$    cmp.l    A2,A1
  335.     bhi    marksfull
  336.     beq    marksfull
  337.  
  338.     move.l    (SP)+,A1
  339.     move.b    D3,(A1)
  340.  
  341.     addq    #1,D3
  342.     add.w    D3,D2
  343.     move.w    D2,farea
  344. 5$    rts
  345. marksyfull
  346.     move.b    #1,stfflag
  347.     move.l    endsym,A1
  348.     subq.l    #6,A1
  349.     clr.l    (A1)
  350.     move.l    A1,endsym
  351. sayisfull
  352.     move.w    #-1,linecount
  353.     print    fullmsg
  354.     bra    leftprint
  355.  
  356. buildsym
  357.     move.b    bflag,D1
  358.     beq    8$
  359.     move.b    stfflag,D1
  360.     bne    sayisfull
  361.     lea    obuf,A0
  362.     moveq    #8,D3
  363.  
  364.     move.w    #ByteSize,D1
  365.     and.w    D6,D1
  366.     beq    2$
  367.     subq.l    #1,A0
  368.     move.l    A0,-(SP)
  369.     move.b    D3,(A0)+
  370.     addq    #1,D3
  371.     move.b    #'.',(A0)+
  372.     cmp.w    #LongSize,D1
  373.     beq    3$
  374.     move.b    #'w',(A0)
  375.     cmp.w    #WordSize,D1
  376.     beq    1$
  377.     move.b    #'b',(A0)
  378. 1$    addq.l    #1,A0
  379.     cmp.b    #'0',(A0)
  380.     beq    3$
  381.     bra    5$
  382.  
  383. 2$    move.l    A0,-(SP)
  384.     move.b    #7,(A0)+
  385.     move.w    #SubCall,D1
  386.     and.w    D1,D6
  387.     beq    3$
  388.     move.b    #'R',(A0)+
  389.     bra    5$
  390. 3$    move.b    #'l',(A0)+
  391. 4$    cmp.b    #'0',(A0)
  392.     bne    5$
  393.     move.b    #'a',(A0)+
  394.     cmp.b    #'0',(A0)
  395.     bne    5$
  396.     move.b    #'b',(A0)
  397. 5$
  398.     move.l    endsym,A1
  399.     lea    endsymtab,A0
  400.     cmp.l    A0,A1
  401.     bhi    marksfull
  402.     beq    marksfull
  403.     move.l    D0,(A1)+
  404.     move.w    farea,D2
  405.     move.w    D2,(A1)+
  406.     clr.l    (A1)
  407.     move.l    A1,endsym
  408.     lea    sarea,A1
  409.     add.w    D2,A1
  410.     lea    endsarea,A0
  411.     cmp.l    A0,A1
  412.     bhi    marksfull
  413.     beq    marksfull
  414.     add.w    D3,D2
  415.     move.w    D2,farea
  416.  
  417.     move.l    (SP)+,A0
  418.     bra    7$
  419. 6$    move.b    (A0)+,(A1)+
  420. 7$    dbra    D3,6$
  421. 8$    rts
  422. 9$    addq.l    #4,SP
  423.     rts
  424. marksfull
  425.     addq.l    #4,SP
  426.     bra    marksyfull
  427.  
  428.  
  429. shlabel
  430.     move.l    A5,D0
  431.     bsr    pseudoaddress
  432.     move.l    D0,D2
  433.     sub.l    D7,D2
  434.     clr.l    D1
  435.     move.b    #'i',D3
  436.     lea    sarea,A1
  437.     lea    symtab,A0
  438.     bra    2$
  439. 1$    addq.l    #2,A0
  440. 2$    move.l    (A0)+,D0
  441.     beq    5$
  442.     cmp.l    D0,D2
  443.     beq    3$
  444.     bls    1$
  445.     cmp.l    D0,D1
  446.     bhi    1$
  447.     move.l    D0,D1
  448.     move.w    (A0)+,D0
  449.     cmp.b    #'*',1(A1,D0.W)
  450.     beq    2$
  451.     move.b    #'i',D3
  452.     cmp.b    #'.',1(A1,D0.W)
  453.     bne    2$
  454.     move.b    2(A1,D0.W),D3
  455.     bra    2$
  456.  
  457. 3$    moveq    #-1,D1
  458.     move.w    (A0)+,D0
  459.     cmp.b    #'*',1(A1,D0.W)
  460.     beq    4$
  461.     move.b    #'i',D3
  462.     cmp.b    #'.',1(A1,D0.W)
  463.     bne    4$
  464.     move.b    2(A1,D0.W),D3
  465.     cmp.b    #2,0(A1,D0.W)
  466.     beq    2$
  467. 4$    movem.l  D1-D3/A0/A1,-(SP)
  468.     lea    0(A1,D0.W),A0
  469.     cmp.b    #'R',1(A0)
  470.     bne    40$
  471.     move.l    A0,-(SP)
  472.     bsr    newline
  473.     move.l    (SP)+,A0
  474. 40$
  475.     bsr    substlocal
  476.     bsr    msg
  477.     bsr    newline
  478.     movem.l    (SP)+,D1-D3/A0/A1
  479.     bra    2$
  480.  
  481. 5$    tst.l    D1
  482.     bmi    6$    * change this
  483.     beq    6$
  484.     cmp.b    #'l',D3
  485.     bne    6$
  486.     eor    D1,D2
  487.     and.b    #%11,D2
  488.     beq    6$
  489.     move.b    #'b',D3
  490. 6$    move.b    D3,itype
  491.     rts
  492.  
  493. substlocal
  494.     lea    lastlocal,A1
  495.     cmp.b    #'B',lastcmd
  496.     bne    30$
  497.     cmp.b    #7,(A0)
  498.     bne    30$
  499.     cmp.b    #'l',1(A0)
  500.     bne    30$
  501.     move.b    #'0',D0
  502.     cmp.b    #'z',(A1)
  503.     bne    1$
  504.     move.b    D0,(A1)
  505.     move.b    D0,1(A1)
  506.     move.b    D0,2(A1)
  507. 1$    add.b    #1,2(A1)
  508.     cmp.b    #'9',2(A1)
  509.     ble    2$
  510.     move.b    D0,2(A1)
  511.     add.b    #1,1(A1)
  512.     cmp.b    #'9',1(A1)
  513.     ble    2$
  514.     move.b    D0,1(A1)
  515.     add.b    #1,(A1)
  516.     cmp.b    #'9',(A1)
  517.     bgt    6$
  518. 2$    moveq    #4,D1
  519.     cmp.b    (A1)+,D0
  520.     bne    3$
  521.     subq    #1,D1
  522.     cmp.b    (A1)+,D0
  523.     bne    3$
  524.     subq    #1,D1
  525.     cmp.b    (A1)+,D0
  526. 3$    subq    #1,A1
  527.     move.l    A0,D0
  528.     move.b    D1,(A0)+
  529.     bra    5$
  530. 4$    move.b    (A1)+,(A0)+
  531. 5$    dbra    D1,4$
  532.     move.l    D0,A0
  533. 6$    rts
  534. 30$
  535.     move.b    #'z',(A1)
  536.     rts
  537.  
  538. lastlocal
  539.     dc.b    'zzz$'
  540.  
  541. shopdlabel
  542.     movem.l  D1-D3/A0/A1,-(SP)
  543.     bsr    pseudoaddress
  544.     bra    .shpdlbl
  545. shoplabel
  546.     movem.l  D1-D3/A0/A1,-(SP)
  547.     bsr    pseudoaddress
  548.     moveq    #0,D2
  549.     sub.l    D7,D0
  550.     tst.l    D1
  551.     bne    .shplbl
  552. .shpdlbl
  553.     moveq    #-1,D2
  554. .shplbl
  555.     lea    symtab,A0
  556. 1$    move.l    (A0)+,D1
  557.     beq    5$
  558.     cmp.l    D1,D0
  559.     bne    2$
  560.     move.w    (A0),D1
  561.     lea    sarea,A0
  562.     add.w    D1,A0
  563.     cmp.b    #'*',1(A0)
  564.     beq    5$
  565.     cmp.b    #2,(A0)
  566.     bne    10$
  567.     cmp.b    #'.',1(A0)
  568.     beq    5$
  569. 10$
  570.     bsr    msg
  571.     bra    7$
  572. 2$    addq.l    #2,A0
  573.     bra    1$
  574. 5$    tst.l    D2
  575.     beq    50$
  576.     tst.l    D0
  577.     beq    50$
  578.     move.l    D0,-(SP)
  579.     char    $
  580.     move.l    (SP)+,D0
  581. 50$
  582.     cmp.l    #$FFFFFF,D0
  583.     bhi    6$
  584.     movem.l  D0/D2,-(SP)
  585.     tst.l    D0
  586.     bne    51$
  587.     char    0
  588.     bra    52$
  589. 51$
  590.     bsr    show6x
  591. 52$
  592.     movem.l  (SP)+,D0/D2
  593.     tst.l    D2
  594.     bne    7$
  595.     tst.l    D0
  596.     beq    7$
  597.     bsr    buildsym
  598.     bra    7$
  599. 6$    bsr    show8x
  600. 7$    movem.l  (SP)+,D1-D3/A0/A1
  601.     rts
  602.  
  603. getaddress
  604.     bsr    getnum
  605.     bne    findsym
  606.     move.l    D2,D0
  607.     bne    1$
  608.     cmp.l    #1,D0
  609. 1$    rts
  610.  
  611. findsym
  612.     moveq    #0,D3
  613.     move.b    ilen,D3
  614.     subq.b    #2,D3
  615.     lea    ibuf,A0
  616.     move.b    D3,(A0)
  617.  
  618.     lea    symtab,A1
  619. 2$    move.l    (A1)+,D0
  620.     beq    30$
  621.     move.l    D3,D1
  622.     move.w    (A1)+,D2
  623.  
  624.     move.l    A0,-(SP)
  625.     move.l    A1,-(SP)
  626.     lea    sarea,A1
  627.     add.w    D2,A1
  628. 3$    cmp.b    (A1)+,(A0)+
  629.     dbne    D1,3$
  630.     beq    4$
  631.     move.l    (SP)+,A1
  632.     move.l    (SP)+,A0
  633.     bra    2$
  634. 4$    addq.l    #8,SP
  635. 30$
  636.     tst.l    D0
  637.     rts
  638.  
  639. aline
  640.     cmp.b    #'a',lastcmd
  641.     bne    .mreturn
  642.     bsr    showadr
  643.     moveq    #7,D0
  644.     bsr    column
  645.     move.w    #32,D3
  646.     move.b    D3,olen
  647.     lea    obuf,A0
  648.     subq.w    #1,D3
  649. 1$    move.b    (A5)+,D0
  650.     cmp.b    #' ',D0
  651.     blt    2$
  652.     cmp.b    #127,D0
  653.     blt    3$
  654. 2$    move.b    #'.',D0
  655. 3$    move.b    D0,(A0)+
  656.     dbra    D3,1$
  657.     print    olen
  658.     rts
  659.  
  660. dline
  661.     cmp.b    #'d',lastcmd
  662.     bne    .mreturn
  663.     bsr    wordalign
  664.     bsr    showadr
  665.     moveq    #7,D0
  666.     bsr    column
  667.  
  668.     bsr    1$
  669. 1$    bsr    2$
  670. 2$    move.l    (A5)+,D0
  671.     bsr    show8x
  672.     bra    prtspc
  673.  
  674. checkcwbreak
  675.     move.l    A5,D0
  676.     addq.l    #2,D0
  677.     bra    .ccbrk1
  678.  
  679. checkcbreak
  680.     move.l    A5,D0
  681. .ccbrk1
  682.     bsr    pseudoaddress
  683.     tst.l    D1
  684.     beq    2$
  685.     sub.l    D7,D0
  686.     lea    symtab,A0
  687. 1$    move.l    (A0)+,D1
  688.     beq    3$
  689.     addq.l    #2,A0
  690.     cmp.l    D0,D1
  691.     bne    1$
  692. 2$    tst.l    D0
  693. 3$    rts
  694.  
  695. iline
  696.     cmp.b    #'B',lastcmd
  697.     beq    101$
  698.     cmp.b    #'b',lastcmd
  699.     bne    100$
  700.     move.b    #1,bflag
  701.     bra    101$
  702. 100$
  703.     cmp.b    #'l',lastcmd
  704.     bne    .mreturn
  705. 101$
  706.     bsr    showadr
  707.  
  708.     moveq    #8,D0
  709.     move.b    tflag,D1
  710.     beq    102$
  711.     moveq    #3,D0
  712. 102$
  713.     bsr    column
  714.  
  715.     move.b    itype,D0
  716.     move.l    D0,-(SP)
  717.  
  718.     cmp.b    #'w',D0
  719.     beq    1$
  720.     cmp.b    #'l',D0
  721.     bne    107$
  722. * covering up references on next
  723. *  word boundary to be avoided
  724.     bsr    checkcwbreak
  725.     bne    105$
  726.     move.l    (SP),D0
  727.     bra    1$
  728. 105$
  729.     move.b    #'b',D0
  730.     move.l    D0,(SP)
  731. 107$
  732.     cmp.b    #'b',D0
  733.     beq    1$
  734.     cmp.b    #'c',D0
  735.     bne    103$
  736.     lea    dcbinst,A0
  737.     bra    104$
  738. 103$
  739.     cmp.b    #'a',D0
  740.     bne    5$
  741.     move.b    #'b',D0
  742. 1$    lea    dcinst,A0
  743.     move.b    D0,4(A0)
  744. 104$
  745.     bsr    msg
  746.     bra    6$
  747.  
  748. 5$    bsr    showi
  749.  
  750. 6$    moveq    #18,D0
  751.     move.b    tflag,D1
  752.     beq    50$
  753.     moveq    #13,D0
  754. 50$
  755.     bsr    column
  756.  
  757.     move.l    (SP)+,D0
  758.  
  759.     cmp.b    #'c',D0
  760.     bne    600$
  761.     moveq    #0,D0
  762. 501$
  763.     addq.l    #1,D0
  764.     addq.l    #1,A5
  765.     move.l    D0,-(SP)
  766.     pea    503$
  767.     pea    502$
  768.     bra    62$
  769. 502$
  770.     addq.l    #4,SP
  771.     move.l    (SP)+,D0
  772.     move.b    (A5),D1
  773.     cmp.b    -1(A5),D1
  774.     beq    501$
  775.     bra    504$
  776. 503$
  777.     move.l    (SP)+,D0
  778. 504$
  779.     bsr    show4x
  780.     comma
  781.     move.b    -1(A5),D0
  782.     bra    show2x
  783.  
  784. 600$
  785.     cmp.b    #'b',D0
  786.     bne    7$
  787.  
  788.     bra    61$
  789. 60$
  790.     comma
  791. 61$
  792.     move.b    (A5)+,D0
  793.     bsr    show2x
  794.     pea    60$
  795. 62$
  796.     move.b    printhead,D0
  797.     cmp.b    #40,D0
  798.     bhi    63$
  799.     bsr    checkcbreak
  800.     beq    64$
  801. 63$
  802.     addq.l    #4,SP
  803. 64$
  804.     rts
  805.  
  806.  
  807. 7$    cmp.b    #'a',D0
  808.     bne    8$
  809.     bra    74$
  810.  
  811. 70$
  812.     addq.l    #4,SP
  813.     move.b    #'''',D0
  814.     bsr    prtchr
  815. 71$
  816.     comma
  817. 72$
  818.     move.b    (A5)+,D0
  819.     bsr    show2x
  820.     pea    73$
  821.     bra    62$
  822. 73$
  823.     comma
  824. 74$
  825.     cmp.b    #' ',(A5)
  826.     bcs    72$
  827.     cmp.b    #126,(A5)
  828.     bhi    72$
  829.  
  830.     move.b    #'''',D0
  831.     bsr    prtchr
  832.     pea    77$
  833. 75$
  834.     move.b    (A5)+,D0
  835.     cmp.b    #'''',D0
  836.     bne    750$
  837.     bsr    prtchr
  838.     move.b    #'''',D0
  839. 750$
  840.     bsr    prtchr
  841.     pea    76$
  842.     bra    62$
  843. 76$
  844.     cmp.b    #' ',(A5)
  845.     bcs    70$
  846.     cmp.b    #126,(A5)
  847.     bhi    70$
  848.     bra    75$
  849. 77$
  850.     move.b    #'''',D0
  851.     bra    prtchr
  852.  
  853. 8$    bsr    wordalign
  854.  
  855.     cmp.b    #'w',D0
  856.     bne    9$
  857.  
  858.     bra    81$
  859. 80$
  860.     comma
  861. 81$
  862.     move.w    (A5)+,D0
  863.     bsr    show4x
  864.     pea    80$
  865.     bra    62$
  866.  
  867. 9$    cmp.b    #'l',D0
  868.     bne    showarg
  869.  
  870.     bra    91$
  871. 90$
  872.     comma
  873. 91$
  874.     move.l    (A5)+,D0
  875.     bsr    shopdlabel
  876.     pea    90$
  877.     bra    62$
  878.  
  879.  
  880. itype    dc.b    'i'
  881. dcinst    dc.b    4,'dc.w'
  882. dcbinst    dc.b    5,'dcb.b'
  883.     cnop    0,2
  884.  
  885. * search table for instruction
  886. showi
  887.     bsr    wordalign
  888.  
  889.     move.w    (A5)+,D5    * get machine code
  890.     move.b    #$C0,D1        * extract size field for later
  891.     and.b    D5,D1
  892.     move.b    D1,isize
  893.     lea    mtab,A0
  894.     moveq    #8,D2        * to pass name (6) and arg type (2)
  895. 1$    move.w    D5,D1        * start search -- copy code to D1
  896.     and.w    (A0)+,D1    * use mask
  897.     cmp.w    (A0)+,D1    * desired op code?
  898.     adda    D2,A0        * point next entry
  899.     bne    1$        * if not, try next
  900.     move.w    -(A0),D6    * get arg type
  901.     lea    olen,A1        * ready copy name to obuf
  902.     moveq    #6,D2        * length of name
  903.     move.b    D2,(A1)+
  904.     adda    D2,A1        * after place for name in obuf
  905.     subq    #1,D2        * move 6 bytes
  906. 2$    move.b    -(A0),-(A1)    * move the name
  907.     dbra    D2,2$
  908. * here code in D5 and arg type in D6
  909. * now do condition code
  910.     move.l    A1,A0
  911.     addq.l    #1,A0
  912.     cmp.b    #'@',(A0)+
  913.     beq    20$
  914.     cmp.b    #'@',(A0)+
  915.     bne    21$
  916. 20$
  917.     subq.l    #1,A0
  918.     move.w    D5,D0
  919.     lsr.w    #7,D0
  920.     and.w    #%00011110,D0  * cond. code times 2
  921.     lea    condlets,A3
  922.     add.w    D0,A3
  923.     move.b    (A3)+,(A0)+
  924.     move.b    (A3),(A0)
  925. 21$
  926. * adjust size and mode for MOVEP
  927.     move.w    D5,D0
  928.     and.w    #%1111000100111000,D0
  929.     cmp.w    #%0000000100001000,D0
  930.     bne    22$
  931.     or.w    #%0000000000100000,D5    * mode is x(An)
  932.     or.b    #%10000000,isize
  933.     bra    23$    * so size like that of MOVEM
  934. 22$
  935. * adjust size for MOVEM
  936.     move.w    #FlagMovem,D0
  937.     and.w    D6,D0
  938.     beq    24$
  939. 23$
  940.     sub.b    #%1000000,isize
  941.     add.b    #1,olen
  942.     bra    3$
  943. 24$
  944.     move.w    #Size,D0
  945.     and.w    D6,D0
  946.     beq    ..shx
  947. 3$    cmp.b    #'.',(A1)+
  948.     bne    3$
  949.     move.b    isize,D0
  950.     move.b    #'l',(A1)
  951.     cmp.b    #LongSize,D0
  952.     beq    4$
  953.     move.b    #'w',(A1)
  954.     cmp.b    #WordSize,D0
  955.     beq    4$
  956.     move.b    #'b',(A1)
  957.     move.b    #ByteSize,D0
  958. 4$    or.b    D0,D6
  959. ..shx
  960.     print    olen
  961.     rts
  962.  
  963. * display operand(s) -- code in D5 and type in D6
  964. showarg
  965.     move.w    D5,D0    * check for no operand
  966.     and.w    #%1111111111111000,D0
  967.     cmp.w    #%0100111001110000,D0
  968.     bne    100$
  969.     rts
  970. 100$
  971.     lea    nameUSP,A0
  972.     move.w    D5,D0    * move to/from USP
  973.     and.w    #%1111111111110000,D0
  974.     cmp.w    #%0100111001100000,D0
  975.     bne    311$
  976.     move.w    D5,D0    * make mode An
  977.     and.w    #%1111111111000111,D5
  978.     move.w    #%0000000000001000,D1
  979.     or.w    D1,D5
  980.     and.w    D1,D0    * test dir.
  981.     bne    310$
  982. 300$
  983.     move.l    A0,-(SP)
  984.     bsr    101$
  985.     comma
  986.     move.l    (SP)+,A0
  987.     bra    msg
  988. 310$
  989.     bsr    msg
  990.     bra    105$
  991. 311$
  992.     cmp.w    #%0100111001000000,D0    * TRAP ?
  993.     bne    312$
  994.     char    #
  995.     move.w    D5,D0
  996.     and.w    #%00001111,D0
  997.     bra    show2x
  998. 312$
  999.     lea    nameSR,A0
  1000.     and.w    #%1111111111000000,D0
  1001.     cmp.w    #%0100000011000000,D0
  1002.     beq    310$
  1003.     cmp.w    #%0100011011000000,D0
  1004.     beq    300$
  1005.     lea    nameCCR,A0
  1006.     cmp.w    #%0100010011000000,D0
  1007.     beq    300$
  1008.  
  1009.     move.w    D6,D0    * second operand reg in 1st field?
  1010.     and.w    #ARegField2,D0
  1011.     beq    201$
  1012.     cmp.w    #RegField1,D0
  1013.     beq    201$
  1014.     bsr    101$    * do first operand
  1015.     comma
  1016.     move.w    D6,D1
  1017.     moveq    #001,D0    * assign An mode
  1018.     and.w    #ARegField2,D1
  1019.     cmp.w    #ARegField2,D1
  1020.     beq    200$
  1021.     moveq    #0,D0    * else is RegField2, so assign Dn mode
  1022. 200$
  1023.     bsr    ex11.10.9
  1024.     bra    showea
  1025. 201$
  1026.     move.w    D5,D0    * test for DBcc
  1027.     and.w    #%1111000011111000,D0
  1028.     cmp.w    #%0101000011001000,D0
  1029.     bne    202$
  1030.     and.w    #%0000000000000111,D5    * make it look like:
  1031.     or.w    #%0001010111000000,D5    *  MOVE EA=x(PC) EA=modeDn,reg
  1032. 202$
  1033.     move.w    D6,D0    * test for CMPM
  1034.     and.w    #FlagCmpm,D0
  1035.     beq    203$
  1036.     and.w    #%0000111000000111,D5    * make like MOVE.B with m. (An)+
  1037.     or.w    #%0001000011011000,D5
  1038. 203$
  1039.     move.w    D6,D0
  1040.     and.w    #PreDecr,D0
  1041.     beq    204$
  1042.     move.w    D5,D1
  1043.     and.w    #%0000111000000111,D5    * save reg's
  1044.     or.w    #%0001000000000000,D5    * fake MOVE.B
  1045.     and.w    #%0000000000001000,D1    * reg or mem?
  1046.     beq    204$
  1047.     or.w    #%0000000100100000,D5    * if mem, modes are -(An)
  1048. 204$
  1049.     move.w    D5,D0
  1050.     and.w    #%1100000000000000,D0
  1051.     bne    101$
  1052.     move.w    D5,D0
  1053.     and.w    #%0011000000000000,D0    * check for move with 2 EA's
  1054.     beq    101$
  1055.     bsr    101$    * got one -- do source
  1056.     comma
  1057. * move 1st EA to pos'n of 2nd
  1058.     bsr    ex11.10.9
  1059.     move.w    D5,D0
  1060.     and.w    #%0000000111000000,D0
  1061.     lsr.w    #3,D0
  1062.     and.w    #%1111000000000000,D5
  1063.     or.w    D1,D5
  1064.     or.w    D0,D5
  1065. 101$
  1066.     move.w    D5,D0    * test for bit static
  1067.     and.w    #%1111111100000000,D0
  1068.     cmp.w    #%0000100000000000,D0
  1069.     bne    111$
  1070.     char    #
  1071.     move.w    (A5)+,D1
  1072.     and.w    #%0000000000011111,D1
  1073.     bra    108$
  1074. 111$
  1075.     move.w    D6,D0
  1076.     and.w    #SmallImmed,D0
  1077.     beq    103$
  1078.     move.w    D5,D0    * test for shift inst. with Dn source
  1079.     and.w    #%1111000000100000,D0
  1080.     cmp.w    #%1110000000100000,D0
  1081.     bne    112$
  1082.     and.w    #%1111111111000111,D5    * zero bits for Dn mode
  1083.     bra    104$    * go extract Dn field
  1084. 112$
  1085.     cmp.w    #%1110000000000000,D0
  1086.     bne    102$
  1087.     and.w    #%1111111111000111,D5
  1088. 102$
  1089.     and.w    #%1111000000000000,D0
  1090.     cmp.w    #%0111000000000000,D0    * check for moveq
  1091.     bne    109$
  1092.     char    #
  1093.     clr.w    D0
  1094.     move.b    D5,D0
  1095.     bpl    110$
  1096.     move.l    D0,-(SP)
  1097.     char    -
  1098.     move.l    (SP)+,D0
  1099.     ext.w    D0
  1100.     neg.w    D0
  1101. 110$
  1102.     bra    show2x
  1103. 109$
  1104. * here is addq, subq, or shift inst. with 3 bit immed. data
  1105.     char    #
  1106.     bsr    ex11.10.9    * so extract the data
  1107.     tst.w    D1    * 0 represents 8
  1108.     bne    108$
  1109.     moveq    #8,D1
  1110. 108$
  1111.     move.w    D1,D0
  1112.     bsr    show2x
  1113.     bra    105$    * show comma and continue
  1114. 103$
  1115.     move.w    D6,D0
  1116.     and.w    #ARegField2,D0
  1117.     cmp.w    #RegField1,D0
  1118.     bne    106$
  1119. 104$
  1120.     clr.w    D0    * mode 0
  1121.     bsr    ex11.10.9
  1122.     bsr    showea
  1123. 105$
  1124.     comma
  1125. 106$
  1126.     move.w    D6,D0
  1127.     and.w    #Displ,D0
  1128.     beq    .sarg3
  1129. * here it's a branch
  1130.     move.w    D5,D0
  1131.     ext.w    D0    * test for displ in next word
  1132.     bne    .shoffs2
  1133. shoffs
  1134.     move.w    (A5)+,D0
  1135. .shoffs1
  1136.     ext.l    D0
  1137.     subq.l    #2,D0    * since added before pc advanced
  1138. .shoffs2
  1139.     ext.l    D0    * add displ to pc
  1140.     add.l    A5,D0
  1141.     bra    shoplabel
  1142. .sarg3
  1143.     move.w    D6,D0    * MOVEM ?
  1144.     and.w    #FlagMovem,D0
  1145.     beq    .sarg5
  1146.     move.w    D5,D0
  1147.     and.w    #%0000010000000000,D0
  1148.     beq    .sarg4
  1149.     move.w    (A5)+,D0    * mask is here, even if EA is 1st arg
  1150.     move.w    D0,-(SP)
  1151.     bsr    .sarg5
  1152.     comma
  1153.     move.w    (SP)+,D0
  1154.     bra    mmask1
  1155. .sarg4
  1156.     bsr    mmask
  1157.     comma
  1158. .sarg5
  1159.     move.w    D5,D0    * change mode for LINK & UNLK
  1160.     and.w    #%1111111111110000,D0
  1161.     cmp.w    #%0100111001010000,D0
  1162.     bne    .sarg6
  1163.     btst    #3,D5    * LINK?
  1164.     bne    1$
  1165.     bsr    1$
  1166.     comma
  1167.     char    #
  1168.     move.w    (A5)+,D0
  1169.     bra    shsigned4x
  1170. 1$    and.w    #%1111111111000111,D5
  1171.     or.w    #%0000000000001000,D5
  1172. .sarg6
  1173.     move.w    D6,D0
  1174.     and.w    #EffAdr,D0
  1175.     beq    .mreturn    * was '.shstub'
  1176. * here source is effective address
  1177.     move.w    D6,D0
  1178.     and.w    #Immed,D0
  1179.     beq    4$
  1180.     bsr    imsrce
  1181.     comma
  1182. 4$    move.w    D5,D0
  1183.     and.w    #%0111111,D0
  1184.     move.w    D0,D1    * save eff. adr
  1185.     cmp.w    #%0111010,D0
  1186.     beq    shoffs    * pc with displacement?
  1187. * + abs. short and long, immediate
  1188.     cmp.w    #%0111000,D0    * abs. short?
  1189.     bne    40$
  1190.     move.w    (A5)+,D0
  1191.     bra    show4x
  1192. 40$
  1193.     cmp.w    #%0111001,D0    * abs. long?
  1194.     bne    5$
  1195.     move.l    (A5)+,D0
  1196.     bra    shoplabel
  1197. 5$    cmp.w    #%0111100,D0    * immediate?
  1198.     beq    imsrce.d
  1199.     cmp.w    #%0111011,D0    * pc with index?
  1200.     beq    50$
  1201.     and.w    #%0111000,D0    * other mode 7 illegal
  1202.     cmp.w    #%0111000,D0
  1203.     beq    .shstub
  1204. 50$
  1205. * here mode not 7 unless pc with index
  1206.     move.w    D1,D0
  1207.     and.w    #%0000111,D1    * get reg bits
  1208.     and.w    #%0111000,D0    * get mode bits
  1209.     lsr.b    #3,D0
  1210. showea
  1211.     bsr    depmode
  1212.     lea    olen,A0
  1213.     move.b    D3,(A0)
  1214.     bra    msg
  1215.  
  1216. depmode
  1217.     clr.b    D3    * holds length
  1218.     lea    obuf,A0
  1219.     dbra    D0,6$
  1220. *Dn
  1221. 50$
  1222.     move.b    #'D',D0
  1223.     bsr    depbyte
  1224.     bra    depreg
  1225. 6$    dbra    D0,7$
  1226. *An
  1227. 60$
  1228.     cmp.b    #7,D1
  1229.     bne    61$
  1230.     move.b    #'S',D0
  1231.     bsr    depbyte
  1232.     move.b    #'P',D0
  1233.     bra    depbyte
  1234. 61$
  1235.     move.b    #'A',D0
  1236.     bsr    depbyte
  1237.     bra    depreg
  1238. 7$    dbra    D0,8$
  1239. *(An)
  1240. 70$
  1241.     move.b    #'(',D0
  1242.     bsr    depbyte
  1243.     bsr    60$
  1244.     move.b    #')',D0
  1245.     bra    depbyte
  1246. 8$    dbra    D0,9$
  1247. *(An)+
  1248.     bsr    70$
  1249.     move.b    #'+',D0
  1250.     bra    depbyte
  1251. 9$    dbra    D0,10$
  1252. *-(An)
  1253.     move.b    #'-',D0
  1254.     bsr    depbyte
  1255.     bra    70$
  1256. 10$
  1257.     dbra    D0,11$
  1258. *x(An)
  1259. *??
  1260.     move.w    (A5)+,D0
  1261.     bsr    shsigned4x
  1262.     bra    70$
  1263. 11$
  1264.     dbra    D0,12$
  1265. *x(An,D/An.)
  1266. *??
  1267.     move.w    (A5),D0
  1268.     ext.w    D0
  1269.     bsr    shsigned4x
  1270.     move.b    #'(',D0
  1271.     bsr    depbyte
  1272.     bsr    60$
  1273. *111$
  1274.     move.b    #',',D0
  1275.     bsr    depbyte
  1276. 111$
  1277.     move.w    (A5),D1    * get number of index reg
  1278.     moveq    #12,D0
  1279.     lsr.w    D0,D1
  1280.     and.w    #%0111,D1
  1281.     move.w    (A5),D0    * An or Dn?
  1282.     bmi    112$
  1283.     bsr    50$
  1284.     bra    113$
  1285. 112$
  1286.     bsr    60$
  1287. 113$
  1288.     move.b    #'.',D0
  1289.     bsr    depbyte
  1290.     move.b    #'w',D0
  1291.     move.w    (A5)+,D1
  1292.     btst    #11,D1    * .W or .L ?
  1293.     beq    114$
  1294.     move.b    #'l',D0
  1295. 114$
  1296.     bsr    depbyte
  1297.     move.b    #')',D0
  1298.     bra    depbyte
  1299. 12$
  1300.     move.w    (A5),D0
  1301.     ext.w    D0
  1302.     movem.l  D1/D3/A0,-(SP)
  1303.     bsr    .shoffs2
  1304.     movem.l  (SP)+,D1/D3/A0
  1305.     move.b    #'(',D0
  1306.     bsr    depbyte
  1307.     bra    111$
  1308.  
  1309.  
  1310. shsigned4x
  1311.     movem.l  D1/D3/A0,-(SP)
  1312.     tst.w    D0
  1313.     bpl    1$
  1314.     neg.w    D0
  1315.     move.w    D0,-(SP)
  1316.     char    -
  1317.     move.w    (SP)+,D0
  1318. 1$    bsr    show4x
  1319.     movem.l  (SP)+,D1/D3/A0
  1320.     rts
  1321.   
  1322. mmask
  1323.     move.w    (A5)+,D0 * get mask
  1324. mmask1
  1325. * if '-(An)', reverse bits
  1326.     move.w    D5,D1
  1327.     and.w    #%0000000000111000,D1
  1328.     cmp.w    #%0000000000100000,D1
  1329.     bne    20$
  1330.     move.w    #15,D3
  1331. 10$
  1332.     roxr.w    #1,D0
  1333.     roxl.w    #1,D1
  1334.     dbra    D3,10$
  1335.     move.w    D1,D0
  1336. 20$
  1337.     clr.b    D2    * last bit not set
  1338.     clr.l    D1    * start with bit 0
  1339.     clr.b    D3    * no bytes deposited yet
  1340.     lea    obuf,A0  * deposit bytes here
  1341.  
  1342. 1$    btst    D1,D0
  1343.     bne    2$
  1344.     clr.b    D2
  1345.     bra    4$
  1346. * have bit 1 -- should we just put in '-'?
  1347. 2$    addq.b    #1,D1    * glance next bit
  1348.     tst.b    D2    * last bit set?
  1349.     beq    3$
  1350.     cmp.b    #8,D1    * last D-register?
  1351.     beq    3$
  1352.     cmp.b    #9,D1    * first A-register?
  1353.     beq    3$
  1354.     cmp.b    #16,D1    * was last register?
  1355.     beq    3$
  1356.     btst    D1,D0    * end of range?
  1357.     beq    3$
  1358.     cmp.b    #'-',D2    * already have hyphen?
  1359.     beq    5$
  1360.     move.b    #'-',D2
  1361.     move.b    D2,(A0)+
  1362.     addq.b    #1,D3
  1363.     bra    5$
  1364. 3$    subq.b    #1,D1
  1365.     bsr    mdepreg
  1366.     st    D2
  1367. 4$    addq.b    #1,D1
  1368. 5$    cmp.b    #16,D1
  1369.     blt    1$
  1370.     lea    olen,A0
  1371.     move.b    D3,(A0)
  1372.     bra    msg
  1373.  
  1374. mdepreg
  1375.     movem.l  D0/D1,-(SP)
  1376.     tst.b    D3
  1377.     beq    1$
  1378.     cmp.b    #'-',D2
  1379.     beq    1$
  1380.     move.b    #'/',D0
  1381.     bsr    depbyte
  1382. 1$    move.b    #'D',D0
  1383.     cmp.b    #8,D1
  1384.     blt    2$
  1385.     move.b    #'A',D0
  1386. 2$    bsr    depbyte
  1387.     and.b    #%0111,D1
  1388.     bsr    depreg
  1389.     movem.l  (SP)+,D0/D1
  1390.     rts
  1391.  
  1392. depreg
  1393.     move.b    #'0',D0
  1394.     add.b    D1,D0
  1395. depbyte
  1396.     move.b    D0,(A0)+
  1397.     addq.b    #1,D3
  1398.     rts
  1399.  
  1400. ex11.10.9
  1401.     move.w    D5,D1
  1402.     and.w    #%0000111000000000,D1
  1403.     lsr.w    #4,D1
  1404.     lsr.w    #5,D1
  1405.     rts
  1406.  
  1407. .shstub
  1408.     print    _astub
  1409.     rts
  1410.  
  1411. _astub    dc.b    6,'oprand'
  1412. smodenames
  1413. nameSR    dc.b    2,'SR'
  1414. nameCCR    dc.b    3,'CCR'
  1415. nameUSP    dc.b    3,'USP'
  1416.     cnop    0,2
  1417.  
  1418. imsrce.d
  1419.     move.w    D6,D0
  1420.     and.w    #StatusMode,D0
  1421.     beq    imsrce
  1422.     lea    smodenames,A0
  1423.     move.w    D6,D0
  1424.     and.w    #ByteSize,D0
  1425.     cmp.w    #WordSize,D0
  1426.     bne    msg
  1427.     lea    3(A0),A0
  1428.     bra    msg
  1429. imsrce
  1430.     char    #
  1431.     move.w    D6,D0
  1432.     and.w    #ByteSize,D0
  1433.     cmp.w    #LongSize,D0
  1434.     bne    1$
  1435.  
  1436.     move.l    (A5),D0
  1437.     bsr    pseudoaddress    * no symbol if ref. outside file
  1438.     move.l    (A5)+,D0
  1439.     tst.l    D1
  1440.     bne    shopdlabel
  1441.     move.l    D0,-(SP)
  1442.     char    $
  1443.     move.l    (SP)+,D0
  1444.     bra    show8x
  1445.  
  1446. 1$    cmp.w    #WordSize,D0
  1447.     beq    2$
  1448.     move.w    (A5)+,D0
  1449.     bra    showbyte
  1450. 2$    move.w    (A5)+,D0
  1451.     bra    show4x
  1452.  
  1453. wordalign
  1454.     move.l    D0,-(SP)
  1455.     move.l    A5,D0
  1456.     bclr    #0,D0
  1457.     move.l    D0,A5
  1458.     move.l    (SP)+,D0
  1459.     rts
  1460.  
  1461.  
  1462. showadr
  1463.     move.l    A5,D0
  1464.     bsr    pseudoaddress
  1465.     tst.l    D1
  1466.     bne    2$
  1467.     move.w    #-1,linecount
  1468.     addq.l    #4,SP
  1469. 1$    rts
  1470. 2$    move.b    tflag,D1
  1471.     bne    1$
  1472.     sub.l    D7,D0
  1473.     bmi    show8x
  1474. show6x
  1475.     bsr    binhex
  1476.     lea    obuf,A0
  1477.     addq    #1,A0
  1478.     move.b    #6,(A0)
  1479.     bra    msg
  1480. showbyte
  1481.     cmp.b    #' ',D0
  1482.     blt    show2x
  1483.     cmp.b    #126,D0
  1484.     bhi    show2x
  1485.     move.l    D0,-(SP)
  1486.     cmp.b    #'''',D0
  1487.     bne    1$
  1488.     bsr    prtchr
  1489. 1$    move.b    #'''',D0
  1490.     bsr    prtchr
  1491.     move.l    (SP)+,D0
  1492.     bsr    prtchr
  1493.     move.b    #'''',D0
  1494.     bra    prtchr
  1495.  
  1496. show2x
  1497.     cmp.b    #9,D0
  1498.     bhi    1$
  1499.     add.b    #$30,D0
  1500.     bra    prtchr
  1501. 1$    bsr    binhex
  1502.     lea    obuf,A0
  1503.     addq    #5,A0
  1504.     move.b    #'$',(A0)
  1505.     subq.l    #1,A0
  1506.     move.b    #3,(A0)
  1507.     bra    msg
  1508. show4x
  1509.     cmp.w    #$FF,D0
  1510.     bls    show2x
  1511.     bsr    binhex
  1512.     lea    obuf,A0
  1513.     addq    #3,A0
  1514.     move.b    #'$',(A0)
  1515.     subq.l    #1,A0
  1516.     move.b    #5,(A0)
  1517.     bra    msg
  1518. show8x
  1519.     bsr    binhex
  1520.     lea    olen,A0
  1521.     bra    msg
  1522.  
  1523.  
  1524. * D0 to hex in obuf
  1525. binhex
  1526.     move.b    #8,olen
  1527.     lea    obuf,A0
  1528.     add.l    #8,A0
  1529.     lea    hextab,A1
  1530.     moveq    #7,D1
  1531. 1$    move.l    D0,D2
  1532.     and.l    #15,D2
  1533.     move.b    0(A1,D2),-(A0)
  1534.     lsr.l    #4,D0
  1535.     dbra    D1,1$
  1536.     rts
  1537.  
  1538. getsnum
  1539.     movem.l  D0/D1,-(SP)
  1540.     move.b    #'0',D1
  1541.     bra    .gtnm
  1542.  
  1543. * hex in ibuf to D2
  1544. getnum
  1545.     lea    ibuf,A0
  1546.     addq.l    #1,A0
  1547.     movem.l  D0/D1,-(SP)
  1548.     move.b    (A0)+,D1
  1549. .gtnm
  1550.     clr.l    D2
  1551.     clr.l    D0
  1552.     cmp.b    #'0',D1    * is it a decimal digit?
  1553.     bcs    9$
  1554.     cmp.b    #'9',D1
  1555.     bhi    9$
  1556.  
  1557.     lea    hextab,A1
  1558. 1$    moveq    #15,D3
  1559. 2$    cmp.b    0(A1,D3),D1
  1560.     dbeq    D3,2$
  1561.     bne    8$    * if not hex digit, done
  1562.     lsl.l    #4,D2
  1563.     add.l    D3,D2
  1564.     move.b    (A0)+,D1
  1565.     addq.b    #1,D0
  1566.     cmp.b    #'a',D1
  1567.     blt    1$
  1568.     sub.b    #32,D1
  1569.     bra    1$
  1570. 8$    move.b    D0,D3
  1571.     cmp.l    D2,D2    * signal ok
  1572. 9$    movem.l  (SP)+,D0/D1
  1573.     rts
  1574.  
  1575. hextab    dc.b    '0123456789ABCDEF'
  1576.  
  1577. symread
  1578.     moveq    #0,D0
  1579.     move.w    D0,farea
  1580.     move.b    D0,bufchcount
  1581.     move.l    D0,bufptr
  1582.     move.b    D0,stfflag
  1583.  
  1584.     move.w    #SymMax,-(SP)
  1585.     lea    symtab,A1
  1586. 1$    subq.w    #1,(SP)
  1587.     beq    10$
  1588.     move.l    A1,-(SP)
  1589.     bsr    readln
  1590.     move.l    (SP)+,A1
  1591.     tst.b    D3
  1592.     bne    2$
  1593. 10$
  1594.     addq    #2,SP
  1595.     move.l    A1,endsym
  1596.     clr.l    (A1)    * terminate table
  1597.     rts
  1598.  
  1599. 2$    movem.l  D3/A1,-(SP)
  1600.     bsr    getsnum        * leaves A0 at beginning of symbol
  1601.     move.b    D3,D0
  1602.     movem.l  (SP)+,D3/A1
  1603.     sub.b    D0,D3        * just scanned 9(?) bytes
  1604.     move.l    D2,(A1)+    * put number in table
  1605.     move.w    farea,D2
  1606.     move.w    D2,(A1)+
  1607.     move.l    A1,-(SP)
  1608.     lea    sarea,A1
  1609.     add.w    D2,A1
  1610.  
  1611.     move.b    D3,(A1)+    * length to table
  1612.     add.w    D3,D2
  1613.     addq.w    #1,D2
  1614.     move.w    D2,farea
  1615.  
  1616. * move the symbol
  1617.     subq    #1,D3
  1618. 3$    move.b    (A0)+,(A1)+
  1619.     dbra    D3,3$
  1620.     move.l    (SP)+,A1
  1621.     bra    1$
  1622.  
  1623.  
  1624.  
  1625. * return A0 pointing to line and D3 length of line
  1626. readln
  1627.     move.l    bufptr,A0
  1628.     move.l    A0,-(SP)
  1629.     moveq    #0,D3    * no chars in line yet
  1630. * back to here when was necessary to read more from file
  1631. .rdln.cont
  1632.     moveq    #0,D2
  1633.     move.b    bufchcount,D2
  1634.     bmi    5$    * this means file is exhausted
  1635.     beq    .rdln.more
  1636.  
  1637.     subq.b    #1,D2
  1638. 2$    cmp.b    #10,(A0)+
  1639.     beq    4$
  1640.     addq.b    #1,D3
  1641. 3$    dbra    D2,2$
  1642. * ran out of chars -- go get more
  1643.     bra    .rdln.more
  1644. * have one line -- check not empty
  1645. 4$    tst.b    D3
  1646.     bne    5$
  1647.     move.l    A0,(SP)    * replace pointer to ret.
  1648.     bra    3$
  1649. 5$    move.l    A0,bufptr
  1650.     move.b    D2,bufchcount
  1651.     move.l    (SP)+,A0
  1652.     rts
  1653.  
  1654.  
  1655. .rdln.more
  1656. * have partial line in buffer with D3 chars in it
  1657.     move.l    (SP)+,A1    * beginning of partial line
  1658. * while D3>0 move chars back to beginning of buffer
  1659.     lea    ibuf,A0
  1660.     move.l    A0,-(SP)    * for ret.
  1661.     move.l    D3,-(SP)
  1662.     subq.b    #1,D3
  1663.     bmi    7$    * if line was of 0 length
  1664. 6$    move.b    (A1)+,(A0)+
  1665.     dbra    D3,6$
  1666.  
  1667. * if file is not yet open, A1 will be 0, since
  1668. *  that is initial value of bufptr
  1669. 7$    move.l    A1,D0
  1670.     bne    8$
  1671.  
  1672. * open the file
  1673.     bsr    seename
  1674.     move.l    #1005,D2
  1675.     call    Open
  1676.     tst.l    D0
  1677.     bne    71$
  1678.     bsr    .symerr
  1679.     addq.l    #8,SP    * ptr and char count were on stack
  1680.     moveq    #0,D3
  1681.     rts
  1682. 71$
  1683.     move.l    D0,symhandle
  1684.  
  1685. * fill remainder of buffer with 80-(D3) chars
  1686. 8$    move.l    #80,D3
  1687.     move.l    (SP)+,D0
  1688.     sub.b    D0,D3
  1689.     move.l    D0,-(SP)
  1690.  
  1691.     lea    ibuf,A1
  1692.     add.l    D0,A1
  1693. * save where to continue processing line
  1694.     move.l    A1,-(SP)
  1695.  
  1696.     move.l    symhandle,D1
  1697.     move.l    A1,D2
  1698.     call    Read
  1699.  
  1700.     tst.b    D0
  1701.     bne    9$
  1702.     move.l    symhandle,D1
  1703.     call    Close
  1704.     st    D0
  1705. 9$    move.b    D0,bufchcount
  1706.  
  1707.     move.l    (SP)+,A0    * continue processing here
  1708.     move.l    (SP)+,D3    * chars scanned so far
  1709.     bra    .rdln.cont
  1710.  
  1711.  
  1712. seename
  1713.     lea    ibuf,A0
  1714.     addq.l    #1,A0
  1715.     tst.b    (A0)
  1716.     bne    1$
  1717.     lea    symfilename,A0
  1718. 1$    move.l    A0,D1
  1719.     rts
  1720.  
  1721. symsave
  1722.     bsr    seename
  1723.     move.l    D1,-(SP)
  1724.     call    DeleteFile
  1725.     move.l    (SP)+,D1
  1726.     move.l    #1006,D2
  1727.     call    Open
  1728.     tst.l    D0
  1729.     beq    .symerr
  1730.  
  1731.     move.l    D0,D1    * keep handle in D1 throughout
  1732.     lea    symtab,A1
  1733. 1$    move.l    (A1)+,D0
  1734.     beq    .symclose
  1735.     movem.l  D1/A1,-(SP)
  1736.     bsr    binhex
  1737.     movem.l  (SP)+,D1/A1
  1738.  
  1739.     move.w    (A1)+,D2
  1740. *    lea    SymLen-4(A1),A0
  1741.     move.l    A1,-(SP)    * save pointer to next symtab entry
  1742.     lea    sarea,A1
  1743.     add.w    D2,A1
  1744.  
  1745.     lea    obuf,A0
  1746.     move.l    A0,-(SP)    * save for pass to WRITE
  1747.     lea    8(A0),A0
  1748.     move.b    #' ',(A0)+
  1749.     moveq    #0,D3
  1750.     move.b    (A1)+,D3    * length of symbol
  1751.     move.l    D3,D2        * count letters to move
  1752.     add.w    #10,D3        * chars to write
  1753.     subq    #1,D2
  1754. 2$    move.b    (A1)+,(A0)+
  1755.     dbra    D2,2$
  1756.     move.b    #10,(A0)
  1757.  
  1758.     move.l    (SP)+,D2    * obuf is buffer
  1759.     movem.l  D1/D3,-(SP)    * save handle & len
  1760.     call    Write
  1761.     movem.l  (SP)+,D1/D3
  1762.  
  1763.     move.l    (SP)+,A1
  1764.     cmp.l    D0,D3
  1765.     beq    1$    * loop if OK
  1766.     bsr    .symclose
  1767.     bra    .symerr
  1768. .symclose
  1769.     call    Close
  1770.     rts
  1771. .symerr
  1772.     call    IoErr
  1773.     jmp    show4x
  1774.  
  1775. funload
  1776.     move.l    fileseg,D1
  1777.     beq    1$
  1778.     call    UnLoadSeg
  1779.     moveq    #0,D0
  1780.     move.l    D0,fileseg
  1781.     move.l    D0,foreseg
  1782.     move.l    D0,segtable
  1783. 1$    rts
  1784.  
  1785. fload
  1786.     bsr    funload
  1787.     bsr    seename
  1788.     call    LoadSeg
  1789.     move.l    D0,fileseg
  1790.     beq    .linkseg
  1791.     move.b    #-1,pflag
  1792.     move.w    #SegMax,D3
  1793.     lea    segtable,A0
  1794.     move.l    D0,A1
  1795. 1$    add.l    A1,A1
  1796.     add.l    A1,A1
  1797.     move.l    A1,D1
  1798.     addq.l    #4,D1
  1799.     move.l    D1,(A0)+
  1800.     move.l    -4(A1),D1
  1801.     subq.l    #8,D1
  1802.     move.l    D1,(A0)+
  1803.     clr.l    (A0)
  1804.     subq.w    #1,D3
  1805.     beq    .linkseg
  1806.     move.l    (A1),A1
  1807.     move.l    A1,D1
  1808.     bne    1$
  1809. .linkseg
  1810.     tst.l    D0
  1811.     beq    2$
  1812.     lsl.l    #2,D0
  1813.     move.l    D0,A5
  1814.     move.l    (A5)+,D0
  1815.     move.l    D0,foreseg
  1816.     move.l    A5,D0
  1817. 2$    rts
  1818.  
  1819. firstfseg
  1820.     move.l    fileseg,D0
  1821.     bra    .linkseg
  1822.  
  1823. nextfseg
  1824.     move.l    foreseg,D0
  1825.     bra    .linkseg
  1826.  
  1827. pseudoaddress
  1828.     moveq    #-1,D1
  1829.     move.b    pflag,D1
  1830.     beq    2$
  1831.     lea    segtable,A0
  1832.     moveq    #0,D4
  1833. 1$    move.l    (A0)+,D1
  1834.     beq    2$
  1835.     move.l    (A0)+,D2
  1836.     add.l    D2,D4
  1837.     move.l    D0,D3
  1838.     sub.l    D1,D3
  1839.     bmi    1$
  1840.     cmp.l    D2,D3
  1841.     bge    1$
  1842.     sub.l    D2,D4
  1843.     add.l    D4,D3
  1844.     move.l    D3,D0
  1845. 2$    rts
  1846.  
  1847. realaddress
  1848.     move.b    pflag,D1
  1849.     beq    2$
  1850.     lea    segtable,A0
  1851.     moveq    #0,D4
  1852. 1$    move.l    (A0)+,D1
  1853.     beq    2$
  1854.     move.l    (A0)+,D2
  1855.     add.l    D2,D4
  1856.     move.l    D0,D3
  1857.     cmp.l    D4,D3
  1858.     bge    1$
  1859.     sub.l    D2,D4
  1860.     sub.l    D4,D3
  1861.     add.l    D3,D1
  1862.     move.l    D1,D0
  1863. 2$    rts
  1864.  
  1865. ksave
  1866.     lea    ibuf,A0
  1867.     addq.l    #1,A0
  1868.     tst.b    (A0)
  1869.     bne    1$
  1870.     rts
  1871. 1$    move.l    A0,D1
  1872.     move.l    D1,-(SP)
  1873.     call    DeleteFile
  1874.     move.l    (SP)+,D1
  1875.     move.l    #1006,D2
  1876.     call    Open
  1877.     move.l    D0,khandle
  1878.     tst.l    D0
  1879.     beq    .symerr
  1880.     rts
  1881.  
  1882. khandle        dc.l    0
  1883. fileseg        dc.l    0
  1884. foreseg        dc.l    0
  1885. symhandle    dc.l    0
  1886. bufptr        dc.l    0
  1887. bufchcount    dc.b    0
  1888. symfilename    dc.b    'symtab',0
  1889.     cnop    0,2
  1890.  
  1891. * string from console to obuf
  1892. getstr
  1893.     move.l    ihandle,D1
  1894.     lea    ibuf,A1
  1895.     move.l    A1,D2
  1896.     moveq    #80,D3
  1897.     move.l    A1,-(SP)
  1898.     call    Read
  1899.     move.l    (SP)+,A1
  1900.     move.b    #0,-1(A1,D0.W)
  1901.     move.b    D0,ilen
  1902.     move.b    D0,D3
  1903.     move.b    (A1),D0
  1904. leftprint
  1905.     move.b    #0,printhead
  1906.     rts
  1907.  
  1908. column
  1909.     move.b    D0,D3
  1910.     sub.b    printhead,D0
  1911.     beq    2$
  1912.     bpl    1$
  1913.     move.w    D3,-(SP)
  1914.     bsr    newline
  1915.     move.w    (SP)+,D0
  1916. 1$    move.b    D0,splen
  1917.     lea    splen,A0
  1918.     bra    msg
  1919. 2$    rts
  1920.  
  1921. newline
  1922.     sub.w    #1,linecount
  1923.     move.b    #10,D0
  1924.     bsr    prtchr
  1925.     bra    leftprint
  1926. prtspc
  1927.     move.b    #' ',D0
  1928. * char in D0 to console
  1929. prtchr
  1930.     move.b    D0,obuf
  1931.     move.l    ohandle,D1
  1932.     lea    obuf,A1
  1933.     move.l    A1,D2
  1934.     moveq    #1,D3
  1935.     bra    .msg1
  1936.  
  1937. *  message to console
  1938. msg
  1939.     move.l    ohandle,D1
  1940.     clr.l    D3
  1941.     move.b    (A0)+,D3
  1942.     move.l    A0,D2
  1943. .msg1
  1944.     add.b    D3,printhead
  1945.     movem.l  D2/D3,-(SP)
  1946.     call    Write
  1947.     movem.l  (SP)+,D2/D3
  1948.     move.l    khandle,D1
  1949.     beq    1$
  1950.     move.b    kflag,D0
  1951.     beq    1$
  1952.     call    Write
  1953. 1$    rts
  1954.  
  1955. * obtain pointer to AmigaDOS
  1956. ioinit
  1957.     move.l    SysBase,A6    * ready call to OpenLibrary
  1958.     lea    libname,A1
  1959.     moveq    #0,D0
  1960.     call    OpenLibrary
  1961.     move.l    D0,A6
  1962.     move.l    D0,DOS_point
  1963. * obtain file handles for output and input opened by CLI
  1964.     call    Output
  1965.     move.l    D0,ohandle
  1966.     call    Input
  1967.     move.l    D0,ihandle
  1968.     rts
  1969.     cnop  0,4
  1970.  
  1971.     section  three,bss
  1972.  
  1973. DOS_point    ds.l  1
  1974. ohandle        ds.l  1
  1975. ihandle        ds.l  1
  1976.  
  1977. olen        ds.b  1
  1978. obuf        ds.b  80
  1979. ilen        ds.b  1
  1980. ibuf        ds.b  IbufLen
  1981. * now on word boundary
  1982.  
  1983. segtable    ds.l SegMax*2
  1984.         ds.l  1
  1985. symtab        ds.b  SymMax*6
  1986. endsymtab    ds.b  6
  1987. sarea        ds.b  SymMax*7
  1988. endsarea    ds.b  30
  1989.  
  1990.     section two,data
  1991.  
  1992. kflag        dc.b    0
  1993. tflag        dc.b    0
  1994. pflag        dc.b    0
  1995. bflag        dc.b    0
  1996. stfflag        dc.b    0
  1997.  
  1998. splen        dc.b    0
  1999.         dcb.b    80,' '
  2000. printhead    dc.b    0
  2001. lastcmd        dc.b    'l'
  2002.     cnop  0,2
  2003. reqlines    dc    20
  2004. linecount    dc    -1
  2005. farea        dc    0
  2006. lastadr        dc.l    0
  2007. endsym        dc.l    symtab
  2008.  
  2009. libname        dc.b    'dos.library',0
  2010. hello        dc.b    26,'Disassemble (? for info).',10
  2011. fullmsg        dc.b    1$-*-1
  2012.         dc.b    10,'Symbol table is full',10
  2013. 1$
  2014. helpmsg        dc.b    1$-*-1
  2015.         dc.b    'l[addr]    list instructions',10
  2016.         dc.b    'd[addr]    dump in hex',10
  2017.         dc.b    'a[addr]    ascii dump',10
  2018.         dc.b    '/addr      address is this',10
  2019.         dc.b    '=<symbol>  add symbol to table',10
  2020.         dc.b    'r[<name>]  read file (symtab)',10
  2021.         dc.b    's[<name>]  save to file (symtab)',10
  2022.         dc.b    'q          quit',10
  2023. 1$
  2024. helpmsg2    dc.b    1$-*-1
  2025.         dc.b    'w<num>     where is this word?',10
  2026.         dc.b    'W<addr>    where is this longword?',10
  2027.         dc.b    'f<name>    file to disassemble',10
  2028.         dc.b    '>          next code segment',10
  2029.         dc.b    '<          first code segment',10
  2030.         dc.b    'o[num]     offset addresses',10
  2031. 1$
  2032. helpmsg3    dc.b    1$-*-1
  2033.         dc.b    'p          offset by segment toggle',10
  2034.         dc.b    'k<name>    keep output in file',10
  2035.         dc.b    't          trim toggle',10
  2036.         dc.b    'b[addr]    build symbols',10
  2037.         dc.b    'n<num>     print n lines after <CR>',10
  2038. 1$
  2039.  
  2040. isize        dc.b    0
  2041.  
  2042. condlets    dc.b    't rahilscccsneeqvcvsplmigeltgtle'
  2043.  
  2044. Size        equ    %0000000000000001
  2045. EffAdr        equ    %0000000000000010
  2046. Displ        equ    %0000000000000100
  2047. Immed        equ    %0000000000001000
  2048. RegField1    equ    %0000000000010000
  2049. RegField2    equ    %0000000000100000
  2050. ARegField2    equ    %0000000000110000
  2051. ByteSize    equ    %0000000011000000
  2052. WordSize    equ    %0000000001000000
  2053. LongSize    equ    %0000000010000000
  2054. SmallImmed    equ    %0000000100000000
  2055. FlagMovem    equ    %0000001000000000
  2056. FlagCmpm    equ    %0000010000000000
  2057. StatusMode    equ    %0000100000000000
  2058. PreDecr        equ    %0001000000000000
  2059. SubCall        equ    %0010000000000000
  2060.  
  2061.     cnop  0,2
  2062. mtab
  2063.     dc    %1111111100000000,%0000000000000000
  2064.     dc.b    'or.   '
  2065.     dc    EffAdr!Size!Immed!StatusMode
  2066.     dc    %1111000110111000,%0000000100001000
  2067.     dc.b    'movep.'
  2068.     dc    EffAdr!RegField2
  2069.     dc    %1111000110111000,%0000000110001000
  2070.     dc.b    'movep.'
  2071.     dc    EffAdr!RegField1
  2072.     dc    %1111000111000000,%0000000100000000
  2073.     dc.b    'btst  '
  2074.     dc    EffAdr!RegField1
  2075.     dc    %1111000111000000,%0000000101000000
  2076.     dc.b    'bchg  '
  2077.     dc    EffAdr!RegField1
  2078.     dc    %1111000111000000,%0000000110000000
  2079.     dc.b    'bclr  '
  2080.     dc    EffAdr!RegField1
  2081.     dc    %1111000111000000,%0000000111000000
  2082.     dc.b    'bset  '
  2083.     dc    EffAdr!RegField1
  2084.     dc    %1111111100000000,%0000001000000000
  2085.     dc.b    'and.  '
  2086.     dc    EffAdr!Size!Immed!StatusMode
  2087.     dc    %1111111100000000,%0000010000000000
  2088.     dc.b    'sub.  '
  2089.     dc    EffAdr!Size!Immed
  2090.     dc    %1111111100000000,%0000011000000000
  2091.     dc.b    'add.  '
  2092.     dc    EffAdr!Size!Immed
  2093.     dc    %1111111111000000,%0000100000000000
  2094.     dc.b    'btst  '
  2095.     dc    EffAdr
  2096.     dc    %1111111111000000,%0000100001000000
  2097.     dc.b    'bchg  '
  2098.     dc    EffAdr
  2099.     dc    %1111111111000000,%0000100010000000
  2100.     dc.b    'bclr  '
  2101.     dc    EffAdr
  2102.     dc    %1111111111000000,%0000100011000000
  2103.     dc.b    'bset  '
  2104.     dc    EffAdr
  2105.     dc    %1111111100000000,%0000101000000000
  2106.     dc.b    'eor.  '
  2107.     dc    EffAdr!Size!Immed!StatusMode
  2108.     dc    %1111111100000000,%0000110000000000
  2109.     dc.b    'cmp.  '
  2110.     dc    EffAdr!Size!Immed
  2111.     dc    %1111000000000000,%0001000000000000
  2112.     dc.b    'move.b'
  2113.     dc    EffAdr!ByteSize
  2114.     dc    %1111000000000000,%0010000000000000
  2115.     dc.b    'move.l'
  2116.     dc    EffAdr!LongSize
  2117.     dc    %1111000000000000,%0011000000000000
  2118.     dc.b    'move.w'
  2119.     dc    EffAdr!WordSize
  2120.     dc    %1111111111000000,%0100000011000000
  2121.     dc.b    'move  '    * from SR
  2122.     dc    EffAdr
  2123.     dc    %1111111100000000,%0100000000000000
  2124.     dc.b    'negx. '
  2125.     dc    EffAdr!Size
  2126.     dc    %1111000111000000,%0100000110000000
  2127.     dc.b    'chk   '
  2128.     dc    EffAdr!RegField2
  2129.     dc    %1111000111000000,%0100000111000000
  2130.     dc.b    'lea   '
  2131.     dc    EffAdr!ARegField2
  2132.     dc    %1111111100000000,%0100001000000000
  2133.     dc.b    'clr.  '
  2134.     dc    EffAdr!Size
  2135.     dc    %1111111111000000,%0100010011000000
  2136.     dc.b    'move  '    * to CCR
  2137.     dc    EffAdr
  2138.     dc    %1111111100000000,%0100010000000000
  2139.     dc.b    'neg.  '
  2140.     dc    EffAdr!Size
  2141.     dc    %1111111111000000,%0100011011000000
  2142.     dc.b    'move  '    * to SR
  2143.     dc    EffAdr
  2144.     dc    %1111111100000000,%0100011000000000
  2145.     dc.b    'not.  '
  2146.     dc    EffAdr!Size
  2147.     dc    %1111111111000000,%0100100000000000
  2148.     dc.b    'nbcd  '
  2149.     dc    EffAdr
  2150.     dc    %1111111111111000,%0100100001000000
  2151.     dc.b    'swap  '
  2152.     dc    EffAdr
  2153.     dc    %1111111111111000,%0100100010000000
  2154.     dc.b    'ext.w '
  2155.     dc    EffAdr!WordSize
  2156.     dc    %1111111111111000,%0100100011000000
  2157.     dc.b    'ext.l '
  2158.     dc    EffAdr!LongSize
  2159.     dc    %1111111111000000,%0100100001000000
  2160.     dc.b    'pea   '
  2161.     dc    EffAdr
  2162.     dc    %1111111110000000,%0100100010000000
  2163.     dc.b    'movem.' ;has size!
  2164.     dc    EffAdr!FlagMovem
  2165.     dc    %1111111100000000,%0100101000000000
  2166.     dc.b    'tst.  '
  2167.     dc    EffAdr!Size
  2168.     dc    %1111111111000000,%0100101011000000
  2169.     dc.b    'tas   '
  2170.     dc    EffAdr
  2171.     dc    %1111111111111111,%0100101011111100
  2172.     dc.b    'illegl'
  2173.     dc    0
  2174.     dc    %1111111110000000,%0100110010000000
  2175.     dc.b    'movem.'
  2176.     dc    EffAdr!FlagMovem
  2177.     dc    %1111111111110000,%0100111001000000
  2178.     dc.b    'trap  '
  2179.     dc    0
  2180.     dc    %1111111111111000,%0100111001010000
  2181.     dc.b    'link  '
  2182.     dc    EffAdr
  2183.     dc    %1111111111111000,%0100111001011000
  2184.     dc.b    'unlk  '
  2185.     dc    EffAdr
  2186. *MOVE to USP
  2187. *MOVE from USP
  2188.     dc    %1111111111110000,%0100111001100000
  2189.     dc.b    'move  '    *  USP
  2190.     dc    EffAdr
  2191.     dc    %1111111111111111,%0100111001110000
  2192.     dc.b    'reset '
  2193.     dc    0
  2194.     dc    %1111111111111111,%0100111001110001
  2195.     dc.b    'nop   '
  2196.     dc    0
  2197.     dc    %1111111111111111,%0100111001110010
  2198.     dc.b    'stop  '
  2199.     dc    0
  2200.     dc    %1111111111111111,%0100111001110011
  2201.     dc.b    'rte   '
  2202.     dc    0
  2203. *RTD
  2204.     dc    %1111111111111111,%0100111001110101
  2205.     dc.b    'rts   '
  2206.     dc    0
  2207.     dc    %1111111111111111,%0100111001110110
  2208.     dc.b    'trapv '
  2209.     dc    0
  2210.     dc    %1111111111111111,%0100111001110111
  2211.     dc.b    'rtr   '
  2212.     dc    0
  2213. *MOVEC
  2214.     dc    %1111111111000000,%0100111010000000
  2215.     dc.b    'jsr   '
  2216.     dc    EffAdr!SubCall
  2217.     dc    %1111111111000000,%0100111011000000
  2218.     dc.b    'jmp   '
  2219.     dc    EffAdr
  2220.     dc    %1111000011111000,%0101000011001000
  2221.     dc.b    'db@@  '
  2222.     dc    EffAdr * lie required by showarg
  2223.     dc    %1111111111000000,%0101000111000000
  2224.     dc.b    'sf    '
  2225.     dc    EffAdr
  2226.     dc    %1111000011000000,%0101000011000000
  2227.     dc.b    's@@   '
  2228.     dc    EffAdr
  2229.     dc    %1111000100000000,%0101000000000000
  2230.     dc.b    'addq. '
  2231.     dc    EffAdr!Size!SmallImmed
  2232.     dc    %1111000100000000,%0101000100000000
  2233.     dc.b    'subq. '
  2234.     dc    EffAdr!Size!SmallImmed
  2235.     dc    %1111111100000000,%0110000100000000
  2236.     dc.b    'bsr   '
  2237.     dc    Displ!SubCall
  2238.     dc    %1111111100000000,%0110000000000000
  2239.     dc.b    'bra   '
  2240.     dc    Displ
  2241.     dc    %1111000000000000,%0110000000000000
  2242.     dc.b    'b@@   '
  2243.     dc    Displ
  2244.     dc    %1111000100000000,%0111000000000000
  2245.     dc.b    'moveq '
  2246.     dc    RegField2!SmallImmed
  2247.     dc    %1111000111000000,%1000000011000000
  2248.     dc.b    'divu  '
  2249.     dc    EffAdr!RegField2
  2250.     dc    %1111000111110000,%1000000100000000
  2251.     dc.b    'sbcd  '
  2252.     dc    EffAdr!PreDecr
  2253.     dc    %1111000111000000,%1000000111000000
  2254.     dc.b    'divs  '
  2255.     dc    EffAdr!RegField2
  2256.     dc    %1111000100000000,%1000000000000000
  2257.     dc.b    'or.   '
  2258.     dc    EffAdr!Size!RegField2
  2259.     dc    %1111000100000000,%1000000100000000
  2260.     dc.b    'or.   '
  2261.     dc    EffAdr!Size!RegField1
  2262.     dc    %1111000111000000,%1001000011000000
  2263.     dc.b    'sub.w '
  2264.     dc    EffAdr!WordSize!ARegField2
  2265.     dc    %1111000111000000,%1001000111000000
  2266.     dc.b    'sub.l '
  2267.     dc    EffAdr!LongSize!ARegField2
  2268.     dc    %1111000100110000,%1001000100000000
  2269.     dc.b    'subx. '
  2270.     dc    EffAdr!Size!PreDecr
  2271.     dc    %1111000100000000,%1001000000000000
  2272.     dc.b    'sub.  '
  2273.     dc    EffAdr!Size!RegField2
  2274.     dc    %1111000100000000,%1001000100000000
  2275.     dc.b    'sub.  '
  2276.     dc    EffAdr!Size!RegField1
  2277.     dc    %1111000111000000,%1011000011000000
  2278.     dc.b    'cmp.w '
  2279.     dc    EffAdr!WordSize!ARegField2
  2280.     dc    %1111000111000000,%1011000111000000
  2281.     dc.b    'cmp.l '
  2282.     dc    EffAdr!LongSize!ARegField2
  2283.     dc    %1111000100000000,%1011000000000000
  2284.     dc.b    'cmp.  '
  2285.     dc    EffAdr!Size!RegField2
  2286.     dc    %1111000100111000,%1011000100001000
  2287.     dc.b    'cmpm. '
  2288.     dc    EffAdr!Size!FlagCmpm
  2289.     dc    %1111000100000000,%1011000100000000
  2290.     dc.b    'eor.  '
  2291.     dc    EffAdr!Size!RegField1
  2292.     dc    %1111000111110000,%1100000100000000
  2293.     dc.b    'abcd  '
  2294.     dc    EffAdr!PreDecr
  2295.     dc    %1111000111000000,%1100000011000000
  2296.     dc.b    'mulu  '
  2297.     dc    EffAdr!RegField2
  2298.     dc    %1111000111111000,%1100000101000000
  2299.     dc.b    'exg   '
  2300.     dc    EffAdr!RegField2
  2301.     dc    %1111000111111000,%1100000101001000
  2302.     dc.b    'exg   '
  2303.     dc    EffAdr!ARegField2
  2304.     dc    %1111000111111000,%1100000110001000
  2305.     dc.b    'exg   '
  2306.     dc    EffAdr!RegField2
  2307.     dc    %1111000111000000,%1100000111000000
  2308.     dc.b    'muls  '
  2309.     dc    EffAdr!RegField2
  2310.     dc    %1111000100000000,%1100000000000000
  2311.     dc.b    'and.  '
  2312.     dc    EffAdr!Size!RegField2
  2313.     dc    %1111000100000000,%1100000100000000
  2314.     dc.b    'and.  '
  2315.     dc    EffAdr!Size!RegField1
  2316.     dc    %1111000111000000,%1101000011000000
  2317.     dc.b    'add.w '
  2318.     dc    EffAdr!WordSize!ARegField2
  2319.     dc    %1111000111000000,%1101000111000000
  2320.     dc.b    'add.l '
  2321.     dc    EffAdr!LongSize!ARegField2
  2322.     dc    %1111000100110000,%1101000100000000
  2323.     dc.b    'addx. '
  2324.     dc    EffAdr!Size!PreDecr
  2325.     dc    %1111000100000000,%1101000000000000
  2326.     dc.b    'add.  '
  2327.     dc    EffAdr!Size!RegField2
  2328.     dc    %1111000100000000,%1101000100000000
  2329.     dc.b    'add.  '
  2330.     dc    EffAdr!Size!RegField1
  2331.  
  2332.     dc    %1111111111000000,%1110000011000000
  2333.     dc.b    'asr   '
  2334.     dc    EffAdr
  2335.     dc    %1111111111000000,%1110000111000000
  2336.     dc.b    'asl   '
  2337.     dc    EffAdr
  2338.     dc    %1111111111000000,%1110001011000000
  2339.     dc.b    'lsr   '
  2340.     dc    EffAdr
  2341.     dc    %1111111111000000,%1110001111000000
  2342.     dc.b    'lsl   '
  2343.     dc    EffAdr
  2344.     dc    %1111111111000000,%1110010011000000
  2345.     dc.b    'roxr  '
  2346.     dc    EffAdr
  2347.     dc    %1111111111000000,%1110010111000000
  2348.     dc.b    'roxl  '
  2349.     dc    EffAdr
  2350.     dc    %1111111111000000,%1110011011000000
  2351.     dc.b    'ror   '
  2352.     dc    EffAdr
  2353.     dc    %1111111111000000,%1110011111000000
  2354.     dc.b    'rol   '
  2355.     dc    EffAdr
  2356.  
  2357.     dc    %1111000100011000,%1110000000000000
  2358.     dc.b    'asr.  '
  2359.     dc    EffAdr!Size!SmallImmed
  2360.     dc    %1111000100011000,%1110000100000000
  2361.     dc.b    'asl.  '
  2362.     dc    EffAdr!Size!SmallImmed
  2363.     dc    %1111000100011000,%1110000000001000
  2364.     dc.b    'lsr.  '
  2365.     dc    EffAdr!Size!SmallImmed
  2366.     dc    %1111000100011000,%1110000100001000
  2367.     dc.b    'lsl.  '
  2368.     dc    EffAdr!Size!SmallImmed
  2369.     dc    %1111000100011000,%1110000000010000
  2370.     dc.b    'roxr. '
  2371.     dc    EffAdr!Size!SmallImmed
  2372.     dc    %1111000100011000,%1110000100010000
  2373.     dc.b    'roxl. '
  2374.     dc    EffAdr!Size!SmallImmed
  2375.     dc    %1111000100011000,%1110000000011000
  2376.     dc.b    'ror.  '
  2377.     dc    EffAdr!Size!SmallImmed
  2378.     dc    %1111000100011000,%1110000100011000
  2379.     dc.b    'rol.  '
  2380.     dc    EffAdr!Size!SmallImmed
  2381.  
  2382.     dc    0,0
  2383.     dc.b    '????  '
  2384.     dc    0
  2385.  
  2386.     end
  2387.  
  2388.